package br.edu.ufcg.boombox.controller;

import br.edu.ufcg.boombox.view.CadastroUsuarioView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import br.edu.ufcg.boombox.model.CadastroUsuarioModel;
import br.edu.ufcg.boombox.model.LoginModel;
import br.edu.ufcg.boombox.model.RepositoryManager;
import br.edu.ufcg.boombox.model.Usuario;


/**
 *
 * @author Silva
 */
public class CadastroUsuarioController implements ActionListener, Inicializavel {
    
    private final CadastroUsuarioView cadastroUsuarioView;

    public CadastroUsuarioController(CadastroUsuarioView cadastroUsuarioView) {
        this.cadastroUsuarioView = cadastroUsuarioView;
        this.cadastroUsuarioView.configuraOuvinte(this);
    }
    
    //singlelton (padrao de projeto que mantem uma unica instancia) pode ser reutilizado no sistema
    
    
    
    public boolean cadastrarUsuario(Usuario user){
        //verificar se usuario eh valido, e se todos os dados foram preenchidos
        if (user != null && user.getNome().length() > 0 && user.getEmail().length() > 0 && user.getTamanhoSenha() > 0 && user.getTamanhoSenha() >= 5 && user.getTamanhoSenha() < 10){
           
             //TODO usuario pronto para ser cadastrado no sistema (implementar >> gravar em arq)
            RepositoryManager.getInstance().cadastrarUsuario(user);
            
            return true;
        }
        return false;
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if (e.getActionCommand().equals("cadastrar")) {
            CadastroUsuarioModel modelo = this.cadastroUsuarioView.lerModelo();
            String idSessao = null;
            if (modelo != null) {
                try {
                    Usuario usuario = new Usuario(modelo.getNome(), modelo.getEmail(), modelo.getSenha(), modelo.getGenero());
                    RepositoryManager.getInstance().cadastrarUsuario(usuario);
                    idSessao = ContextoDaAplicacao.getInstance().logar(modelo.getEmail(), modelo.getSenha());
                    this.cadastroUsuarioView.dispose();
                    this.cadastroUsuarioView.clear();                    
                    ContextoDaAplicacao.getInstance().getControlador("paginaInicialBoomBoxController").inicializar();
                } catch (FalhaDeAutenticacaoException ex) {
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null, "Não foi possível logar no Boombox!");
                }
            } else if (e.getActionCommand().equals("cancelar")) {
                this.cadastroUsuarioView.dispose();
                this.cadastroUsuarioView.clear();
                ContextoDaAplicacao.getInstance().getControlador("loginController").inicializar();
            }
            
        }
    }

    @Override
    public void inicializar() {
        this.cadastroUsuarioView.setVisible(true);
    }
    

    
}
